﻿using System;
//使用事件机制，模拟实现一个闹钟功能。
//闹钟可以有嘀嗒（Tick）事件和响铃（Alarm）两个事件。
//在闹钟走时时或者响铃时，在控制台显示提示信息。
namespace work3_2
{
    public class clock
    {
        DateTime alarmTime = DateTime.Now;

        public delegate void AlarmHandler(object sender, DateTime args);//委托
        public delegate void TickHanlder(object sender, DateTime args);

        public event AlarmHandler OnAlarm;//事件
        public event TickHanlder OnTick;

        public void Alarm(object sender, DateTime time)//sender指触发事件的控件
        {
            Console.WriteLine("设定的时间" + time + "到啦！");
        }

        public void Tick(object sender, DateTime time)
        {
            Console.WriteLine("现在是" + time);
        }
        public clock()
        {
            OnAlarm += Alarm;//事件的订阅，示例为按钮点击事件
                             //当一个主题对象的状态发生改变时,
                             //所有监听它的观察者对象都得到通知并被自动更新。
            OnTick += Tick;
        }
        public void Start()
        {
            while (true)
            {
                DateTime now = DateTime.Now;
                OnTick(this, now);//this触发
                if (now.ToString() == alarmTime.ToString())//到达预定时间
                {
                    OnAlarm(this, alarmTime);
                }
                System.Threading.Thread.Sleep(1000);//执行上述代码后延迟1秒再执行之后的代码
            }
        }

        public void SetAlarmTime(DateTime time)//闹钟模块
        {
            Console.WriteLine("设定的时间："+time);
            alarmTime = time;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            clock clock = new clock();
            DateTime time = new DateTime();
            time = DateTime.Now.AddSeconds(5);//在当前时间添加秒，即在5秒后闹钟响起
            clock.SetAlarmTime(time);
            clock.Start();
        }
    }
}
